package LeeJS;

public class J29_BaseClass {
	
	/*
			
			기본 클래스 base class
			일부 인터페이스가 많은 추상 메서드를 가지고 있는 경우,
			이것을 구현하는 클래스는 이 모든 메서드 a, b, c, d, e 를 재정의해야 함
			하지만, 실제 사용하는 메서드 c 가 일부라면 
			불필요한 메서드 a, b, d, e 를 재정의하는 것은 지루하고 비효율적인 작업이 될 수 있음
			
			이런 경우 구현클래스를 일반클래스로 확장하여 수정하기를 원하는 매서드만 재정의함
			이러한 용도로 사용하는 클래스를 base class 라 함
			아래 예에서는 BadInterface 를 구현한 BadClass 를 확장하여
			GoodClass1, GoodClass2 를 만듦
			
			자바 웹 프로그래밍에서 서블릿 클래스를 만들때 Servlet 이라는 
			5개의 추상 메서드를 포함한 인터페이스를 사용함
			이런 경우 다 사용하지 않음에도 불구하고 5개의 추상메서드에 대한 구현 코드를 
			모두 작성 이에 대한 해결책으로 GenericServlet 이라는 클래스를 확장해서
			단 하나의 메서드, service 메서드만 재정의해서 사용하면 됨
			
	 */
	
	public static void main(String[] args) {
		
		
		
	}

}


interface BadInterface{
	
	void a();
	char b();
	int c();
	String d();
	boolean e();
	
}

class BadClass implements BadInterface{
	@Override
	public void a(){}
	
	@Override
	public char b(){return 0;}
	
	@Override
	public int c(){return 0;}
	
	@Override
	public String d(){return null;}
	
	@Override
	public boolean e(){return false;}
	
	
}


class GoodClass1 extends BadClass{
	
	@Override
	public int c() {
		
		return super.c();
	
	}
}


class GoodClass2 extends BadClass{
	
	@Override
	public void a() {
		// TODO Auto-generated method stub
		super.a();
	}
	
	@Override
	public boolean e() {
		// TODO Auto-generated method stub
		return super.e();
	}
	
}